package com.heihei.serviceimpl.tas;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.heihei.common.page.Condition;
import com.heihei.common.page.Query;
import com.heihei.common.response.ResponseVO;
import com.heihei.entity.tas.TasDailyTaskInfoEntity;
import com.heihei.enums.DeleteFlagEnum;
import com.heihei.mapper.tas.TasDailyTaskInfoMapper;
import com.heihei.service.tas.TasDailyTaskInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heihei.vo.tas.TasDailyTaskInfoVO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author duanhf
 * @since 2021-12-20
 */
@Service
public class TasDailyTaskInfoServiceImpl extends ServiceImpl<TasDailyTaskInfoMapper, TasDailyTaskInfoEntity> implements TasDailyTaskInfoService {

    /**
     * 添加
     *
     * @author duanhf
     * 2021年12月21日 15:59:12
     */
    @Override
    public ResponseVO<String> add(TasDailyTaskInfoEntity paramEntity) {
        if(StringUtils.isEmpty(paramEntity.getTitle())) {
            return ResponseVO.paramLess("标题不能为空");
        }
        if(StringUtils.isEmpty(paramEntity.getTaskTypeId())) {
            return ResponseVO.paramLess("类型不能为空");
        }
        //添加时，清空id
        paramEntity.setId(null);
        //清空公共字段
        paramEntity.removeAllPublicField();
        //执行添加操作
        boolean flag = this.save(paramEntity);
        if(!flag) {
            return ResponseVO.dealException("添加可能未成功");
        }
        return ResponseVO.dealSuccess(paramEntity.getId());
    }

    /**
     * 修改
     *
     * @author duanhf
     * 2021年12月21日 16:03:50
     */
    @Override
    public ResponseVO<Boolean> myUpdateById(TasDailyTaskInfoEntity paramEntity) {
        if(StringUtils.isEmpty(paramEntity.getId())) {
            return ResponseVO.paramLess("主键ID不能为空");
        }
        TasDailyTaskInfoEntity currDbEntity = this.getById(paramEntity.getId());
        if(Objects.isNull(currDbEntity)) {
            return ResponseVO.paramIllegal("该记录可能不存在");
        }
        if(DeleteFlagEnum.DELETED.getKey().equals(currDbEntity.getDelFlag())) {
            return ResponseVO.paramIllegal("该记录可能已被删除");
        }
        //不允许修改公共字段
        paramEntity.removeAllPublicField();
        //执行修改操作
        boolean flag = this.updateById(paramEntity);
        if(!flag) {
            return ResponseVO.dealException("修改可能未成功");
        }
        return ResponseVO.dealSuccess(true);
    }

    /**
     * 删除
     *
     * @author duanhf
     * 2021年12月21日 16:07:50
     */
    @Override
    public ResponseVO<Boolean> deleteByIdLogic(String id) {
        if(StringUtils.isEmpty(id)) {
            return ResponseVO.paramLess("请传入要删除记录的ID");
        }
        TasDailyTaskInfoEntity entity = new TasDailyTaskInfoEntity();
        entity.addDelInfo(id, DeleteFlagEnum.DELETED.getKey());
        boolean flag = this.updateById(entity);
        if(!flag) {
            return ResponseVO.dealException("删除可能未成功");
        }
        return ResponseVO.dealSuccess(true);
    }

    /**
     * 批量删除
     *
     * @author duanhf
     * 2021年12月21日 16:15:22
     */
    @Override
    public ResponseVO<Boolean> deleteBatch(List<String> idList) {
        if(CollectionUtils.isEmpty(idList)) {
            return ResponseVO.paramLess("请传入要删除记录的ID");
        }
        List<TasDailyTaskInfoEntity> entityList = idList.stream().map(id -> {
            TasDailyTaskInfoEntity entity = new TasDailyTaskInfoEntity();
            entity.addDelInfo(id, DeleteFlagEnum.DELETED.getKey());
            return entity;
        }).collect(Collectors.toList());
        boolean flag = this.updateBatchById(entityList);
        if(!flag) {
            return ResponseVO.dealException("删除可能未成功");
        }
        return ResponseVO.dealSuccess(true);
    }

    /**
     * 列表查询
     *
     * @author duanhf
     * 2021年12月21日 16:55:13
     */
    @Override
    public ResponseVO<IPage<TasDailyTaskInfoVO>> myPageList(TasDailyTaskInfoVO entityParam, Query query) {
        IPage<TasDailyTaskInfoVO> pageDataList = this.baseMapper.getPageConditional(Condition.getPage(query), entityParam, DeleteFlagEnum.NOT_DELETED.getKey());
        pageDataList.getRecords().forEach(record -> {
            if(DeleteFlagEnum.DELETED.getKey().equals(record.getTaskTypeDelFlag())) {
                record.removeAllTypeInfo();
            }
        });
        return ResponseVO.dealSuccess(pageDataList);
    }

    /**
     * 获取详情
     *
     * @author duanhf
     * 2021年12月21日 17:34:39
     */
    @Override
    public ResponseVO<TasDailyTaskInfoVO> myGetById(String id) {
        TasDailyTaskInfoVO vo = this.baseMapper.getByIdWithTypeInfo(id, DeleteFlagEnum.NOT_DELETED.getKey());
        if(Objects.isNull(vo)) {
            return ResponseVO.paramIllegal("该记录不存在或者已被删除");
        }
        if(DeleteFlagEnum.DELETED.getKey().equals(vo.getTaskTypeDelFlag())) {
            vo.removeAllTypeInfo();
        }
        return ResponseVO.dealSuccess(vo);
    }
}
